import pandas as pd
from langchain_text_splitters import CharacterTextSplitter
from langchain_community.document_loaders import DirectoryLoader
from tqdm import tqdm  #这是一个进度条库
from local_llm_model import get_ans
'''
读取一个知识库里面的数据，然后进行有用问题的抽取，形成一个 问  答 形式的xlsx，是一个文件夹下的所有文件，形成有用的qa问答对
对文档切片进行qa问答对的抽取，如果小片段不够200个字符，则不进行抽取
'''

def generate_qa(name,contents):
    result = []
    qa_dir = f"data/database_dir/{name}/qa"

    for content in tqdm(contents):
        # 文本太短则认为不具有信息
        if len(content) < 200:
            continue
        print(content)
        prompt = f"""假设你是一个大学老师，你需要根据主题词和文章内容中帮我提取有价值和意义的问答对，有助于后续学生的提问。
                主题词：{name}
                文章内容：
                {content}
                请注意，你提取的问答内容必须和主题词高度符合，无需输出其他内容，提取的每个问答返回一个python字典的格式，样例如下：
                {{"问":"xxx","答":"xxx"}}
                {{"问":"xxx","答":"xxx"}}
                提取的问答内容为："""

        answers = get_ans(prompt)
        answers = answers.split("\n")

        for answer in answers:
            if len(answer) < 10:
                continue
            try:
                #将字符串作为表达式求他的值
                answer = eval(answer)
            except:
                continue
            if "问" not in answer or "答" not in answer:
                continue
            result.append({
                "question": answer["问"],
                "answer": answer["答"]
            })
    result_df = pd.DataFrame(result)
    result_df.to_excel(qa_dir + "/qa_result.xlsx", index=False)   #为什么要存到本地呢?
    #最终就是要让其去存储到一个xlsx文件中
    return result_df




